Break out into a separate function.
authorRichard Hult <richard@imendio.com>
Sat, 16 Jun 2007 15:43:23 +0000 (15:43 +0000)
committerRichard Hult <rhult@src.gnome.org>
Sat, 16 Jun 2007 15:43:23 +0000 (15:43 +0000)
2007-06-16  Richard Hult  <richard@imendio.com>

* gdk/quartz/gdkevents-quartz.c (gdk_event_translate)
(break_all_grabs): Break out into a separate function.

svn path=/trunk/; revision=18160

ChangeLog
gdk/quartz/gdkevents-quartz.c

index 7af406dec4aeea7dfd42c5923aebb016e655dab0..e8cc13742db06069736c958f70041e86e7a8f636 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2007-06-16  Richard Hult  <richard@imendio.com>
+
+       * gdk/quartz/gdkevents-quartz.c (gdk_event_translate) 
+       (break_all_grabs): Break out into a separate function.
+
 2007-06-16  Richard Hult  <richard@imendio.com>
 
        * gdk/quartz/GdkQuartzWindow.c: (isInMove): Implement, to be used
index 536b0c65ec988c08b44219ce0c0adaa92fa762b1..6b4e673969f68c0be4f72d493781cd931294c201 100644 (file)
@@ -253,6 +253,31 @@ gdk_pointer_grab (GdkWindow    *window,
                                confine_to, cursor, FALSE);
 }
 
+/* This is used to break any grabs in the case where we have to due to
+ * the grab emulation. Instead of enforcing the desktop wide grab, we
+ * break it when the app loses focus for example.
+ */
+static void
+break_all_grabs (void)
+{
+  if (_gdk_quartz_keyboard_grab_window)
+    {
+      generate_grab_broken_event (_gdk_quartz_keyboard_grab_window,
+                                  TRUE, FALSE,
+                                  NULL);
+      g_object_unref (_gdk_quartz_keyboard_grab_window);
+      _gdk_quartz_keyboard_grab_window = NULL;
+    }
+
+  if (_gdk_quartz_pointer_grab_window)
+    {
+      generate_grab_broken_event (_gdk_quartz_pointer_grab_window,
+                                  FALSE, pointer_grab_implicit,
+                                  NULL);
+      pointer_ungrab_internal (FALSE);
+    }
+}
+
 static void
 fixup_event (GdkEvent *event)
 {
@@ -1481,24 +1506,7 @@ gdk_event_translate (NSEvent *nsevent)
   if ([nsevent type] == NSAppKitDefined)
     {
       if ([nsevent subtype] == NSApplicationDeactivatedEventType)
-       {
-         if (_gdk_quartz_keyboard_grab_window)
-           {
-             generate_grab_broken_event (_gdk_quartz_keyboard_grab_window,
-                                         TRUE, FALSE,
-                                         NULL);
-             g_object_unref (_gdk_quartz_keyboard_grab_window);
-             _gdk_quartz_keyboard_grab_window = NULL;
-           }
-
-         if (_gdk_quartz_pointer_grab_window)
-           {
-             generate_grab_broken_event (_gdk_quartz_pointer_grab_window,
-                                         FALSE, pointer_grab_implicit,
-                                         NULL);
-             pointer_ungrab_internal (FALSE);
-           }
-       }
+         break_all_grabs ();
     }
 
   window = find_window_for_ns_event (nsevent, &x, &y);